<?php

abstract class Cache_Slot_Select extends Cache_Slot
{
	/**
	 * @var Db_Select
	 */
	protected $_select;
	
	public function __construct(Db_Select $select, $lifetime = 86400) 
	{
		$this->_select = $select;
		$id = md5($select->__toString());
		parent::__construct($id, $lifetime);
	}
	
	/**
	 * Загрузка данных из кеша.
	 * 
	 * @return Db_Row
	 */
	public function load()
	{
		$load = parent::load();
		
		try {
			if ($load instanceof Db_Row) {
				$load->setTable($this->_select->getTable());
			} elseif ($load instanceof Db_Rowset) {
				foreach ($load as $l) {
					$l->setTable($this->_select->getTable());
				}
			}
		} catch (Exception $e) {
			// Магия!
			// На этапе setTable() иногда почему-то кидаются разнообразные ошибки, но если их игнорировать - все работает нормально...
		}
		
		return $load;
	}
	
}
